Zurück in Elementare ProgrammentwicklungWeiter in Elementare ProgrammentwicklungBeispiel QuadratDialog Zusammenfassung ?

Benutzeroberfläche

Wir veranschaulichen die Entwicklung einer graphischen Benutzerschnittstelle (GUI) am Beispiel der Arbeitsmappe QuadratProgrammiertDialog.xls. Das Programm startet nach einem Klick auf die Schaltfläche ‘Quadrat zeichnen’ und verlangt vom Benutzer die Werte für die Abszisse und Ordinate der linken oberen Quadratecke. Nach der Eingabe der Seitenlänge zeichnet es ein Quadrat an der eingegebenen Position.

Excel stellt vordefinierte Objektklassen bereit, nach deren Muster der Entwickler Objekte erstellen kann. Man bezeichnet Objektklassen deshalb auch als ”Objektfabriken”. Die Benutzeroberfläche enthält Objekte der Klassen Tabellenzellen, Schaltflächen und Eingabefelder:

Der Begriff Objekt lässt sich am Beispiel der Schaltfläche definieren:

Projektexplorer

Der Projektexplorer von QuadratProgrammiertDialog.xls gibt einen Überblick über das ProjektQuadratDialog. Das Projekt verwendet Subroutine Quadrat der Arbeitsmappe QuadratProgrammiert.xls. Im Projektexplorer finden Sie einen entsprechenden Verweis:

Ein Verweis kann sicht nicht nur auf eine Arbeitsmappe, sondern auch auf Nicht-Excelcode beziehen. Externer Code kann zum Beispiel aus ausführbaren Dateien mit der Erweiterung .exe (Abkürzung für executable code), ActiveX-Steuerelementen (*.ocx) oder Programmbibliotheken (zum Beispiel *.dll) stammen.

Aufgabe Suchen Sie nach einigen .exe-, ocx.- und .dll-Dateien ((»Rechtsklick auf Start-Schaltfläche)).

Ereignisprozeduren

Der folgende Bildschirmausschnitt zeigt, wie der Entwickler nach einem Klick auf den Menüpunkt »Formular der Entwicklungsumgebung (»Alt/F11) die Schaltfläche Quadrat zeichnen auf das Tabellenblatt gesetzt hat. Sobald der Entwickler mit dem Schaltenflächensymbol der Toolbox die Schaltfläche gezeichnet hat, verlangt Excel den Namen einer Ereignisprozedur:

Quadrat_Klick sei der Name der Ereignisprozedur. Sie soll die bereits in QuadratProgrammiert.xls definierte Subroutine verwenden:

Quadrat(
  Blattname As String,
  X As Integer,
  Y As Integer,
  Seite As Integer)

Die vier Argumente Blattname, X, Y und Seite werden in QuadratProgrammiertDialog.xls vom Benutzer definiert, und zwar in der Anweisung InputBox. Wer Argumentwerte nicht bereits zur Übersetzungszeit definiert, sondern erst zur Laufzeit vom Benutzer eingeben lässt, muss mit Eingabefehlern rechnen. Die Ereignisprozedur Quadrat_Klick der Schaltfläche Quadrat zeichnen soll deshalb die Eingabe zuerst prüfen. Das Ergebnis der Prüfung wird im Ausgabefeld MsgBox mitgeteilt. Das folgende Bild zeigt eine mögliche Fehlermeldung:

Wir definieren nun die Ereignisprozedur Quadrat_Click der Schaltfläche Quadrat zeichnen. Sie soll die folgenden Aufgaben erfüllen:

Ihr Code lautet deshalb:

Sub Quadrat_Click()
  Dim X As String, Y As String, Länge As String

  ‘-- Eingaben lesen
  X = InputBox(Prompt:=“X: ”, Title:=“Abszisse”)		'benannte Argumente
  Y = InputBox(“Y: ”, “Ordinate”)				'Positionsargumente
  Länge = InputBox(“Seitenlänge: ”, “Quadrat”)

  ‘-- Eingaben prüfen
  If X = "" Or X = "0" Or Y = "" Or Y = "0" Or Länge = "" Or Länge = "0" Then
    MsgBox "Null- oder Leereingaben nicht erlaubt"
  Else
    Quadrat “Dialog”, CInt(X),CInt(Y),CInt(Länge)
  End If
End Sub

Das Eingabefeld wird im Gegensatz zur Schaltfläche Quadrat zeichnen nicht vom Programmierer entworfen, sondern ist das Ergebnis der Anweisung InputBox. Die Entscheidungsanweisung prüft die eingelesenen Argumente auf leer ("") oder 0. Das Schlüsselwort Or ist ein boolscher Operator. Boolsche Operatoren wie Or, And und Not verknüpfen Operanden so, dass die Verknüpfung den Wert True oder False des Datentyps Boolean ergibt. Gibt der Benutzer zum Beispiel für X den Wert 0 ein, so wird der Ausdruck X = "" Or X = "0" Or Y = "" Or Y = "0" Or Länge = "" Or Länge = "0" wahr und das Programm meldet ”Null- oder Leereingaben nicht erlaubt". Dem Benutzer bleibt dann nichts anderes übrig, als alle drei Argumente nochmals einzugeben.

Aufgabe Wie erreichen Sie, dass der Benutzer nach einem Fehler nur einen Wert neu eingeben muss?

Der Aufruf von Quadrat enthält drei Funktionsaufrufe des Formats Ganzzahl = CInt(<Zahlen- oder Textausdruck>). CInt (convert to integer) konvertiert einen nummerischen oder alphanummerischen Ausdruck in einen Wert des Datentyps Integer. Diese Funktion ist erforderlich, weil die Argumente von Quadrat (mit Ausnahme des ersten) ganzzahlig sind, der Rückgabewert der vordefinierten Funktion InputBox aber immer eine Zeichenkette sein muss.


Aufgabe Übung HexagonDialog
Verweise als eine Art der Wiederverwendung von Code